import re

VALID_COMPANY_SUFFIX = ['分公司', '公司', '厂', '合作社', '研究院', '设计院', '监理所', '事务所', '集团', '研究所',
                        '勘测院', '工程处', '勘察院', '检测站', '总院', '测绘院', '大队', '医院', '服务部',
                        '环境保护局', '店']


class CompanyNameMixIn(object):
    @staticmethod
    def wash_company(com_name, pattern='', plus=''):
        '''
        调用 re.sub 清洗掉公司名中的非正常字段。

        :param com_name: 公司名；
        :param pattern: 自定义清洗 pattern ，调用方法是 re.sub ；
        :param plus: 需要清洗掉的字词，用|分隔。
        :return: 清洗后的公司名。
        '''
        if not pattern:
            if plus:
                pattern = r"(?:第[一二三\d]名|第?[一二三]?标段[一二三]?|[A-Za-z1-9废]包|[(（].*?[币率包体标元值%‰].*?[）)]|\d+[\.、]?|{plus}|[中投]标人?|[候牵][头选]人?|成交价|价格|备注|内容|总价|入围|供[应货]商|金额|[排顺][名序]|单位|名称|建造师|包号|费率|结果|成交|报价|承担|地址|得分|名次|/)[\)）为]?"
            else:
                pattern = r"(?:第[一二三\d]名|第?[一二三]?标段[一二三]?|[A-Za-z1-9废]包|[(（].*?[币率包体标元值%‰].*?[）)]|\d+[\.、]?|[中投]标人?|[候牵][头选]人?|成交价|价格|备注|内容|总价|入围|供[应货]商|金额|[排顺][名序]|单位|名称|建造师|包号|费率|结果|成交|报价|承担|地址|得分|名次|/)[\)）为]?"

        return re.sub(pattern, '', com_name)

    @staticmethod
    def com_name_is_valid(com_name, length=(4, 35)):
        """
        判断字符串是否为合法的企业名
        默认检查长度4,35之内，可以自行更改
        """
        short, long = length
        if not short < len(com_name) < long:
            return False

        if any(c in com_name for c in
               ['*', '&', '%', '$', '#', '@', '<', '>', '?', '？', '。', '《', '》', '!', '！', '、', '^']):
            return False  # 含有特殊字符，直接丢弃

        if all(v not in com_name for v in VALID_COMPANY_SUFFIX):
            return False

        return True
